package Sessions;


import java.sql.Time;
import java.util.ArrayList;
import java.util.Date;
import java.util.Random;


import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;


import org.jboss.ejb3.annotation.RemoteBinding;

import EntityBeans.EsperienzaLavorativa;
import EntityBeans.Indirizzo;
import EntityBeans.UtenteRegistrato;


/**
 * Session Bean implementation class RicercaSession
 */
@Stateless
@RemoteBinding(jndiBinding="RegistrazioneSessionRemote")
public class RegistrazioneSession implements RegistrazioneSessionRemote {
	@PersistenceContext(unitName="swimv2")
	
	private EntityManager manager;
	boolean matchid = false;
    public RegistrazioneSession() {
        // TODO Auto-generated constructor stub
    }

	@Override
	public Boolean aggiungiUtente(String nome, String cognome, String password, String email,Date data_di_nascita, char sesso, String via, String numerocivico,String paese, int cap, String regione,String nazione){
	
		UtenteRegistrato utente = new UtenteRegistrato();
		Indirizzo indirizzo = new Indirizzo();
		Integer id_utente = this.generazioneCasualeId();
		String idUtente = (String)id_utente.toString();
		while(this.controlloId(idUtente))
			this.generazioneCasualeId();
		utente.setId(idUtente);
		utente.setNome(nome);
		utente.setCognome(cognome);
		utente.setPassword(password);
		utente.setEmail(email);
		utente.setSesso(sesso);
		utente.setNomevia(via);
		utente.setNumerocivico(numerocivico);
		utente.setDatadinascita(data_di_nascita);
		utente.setCap(cap);
		indirizzo.setCap(cap);
		indirizzo.setNazione(nazione);
		indirizzo.setNomevia(via);
		indirizzo.setNumerocivico(numerocivico);
		indirizzo.setPaese(paese);
		indirizzo.setRegione(regione);
		manager.persist(indirizzo);
		manager.persist(utente);
		return true;
		
	}
	
	private int generazioneCasualeId() {
		/*Time timeClass = new Time(0);
		long time = timeClass.getTime();
		return time;*/
		int casual = 0;
		Random rand = new Random();
		casual = rand.nextInt();
		while(casual<0)
			casual = rand.nextInt();
		return casual;
	}
	private boolean controlloId(String id)
	{
		boolean match = false;
		String s = "FROM UtenteRegistrato";	
		Query q = manager.createQuery(s);
		@SuppressWarnings("unchecked")
		ArrayList<UtenteRegistrato> utenti = (ArrayList<UtenteRegistrato>) q.getResultList();
		int i=0;
		while(i<utenti.size() && match == false)
		{
			if(id.equals(utenti.get(i).getId()))
				match = true;
			else
				match = false;
			i++;
		}
		return match;
	}

	@Override
	public String recuperaUtente(String email) {
		String s = "SELECT id FROM UtenteRegistrato u WHERE u.email=:email";
		Query q = manager.createQuery(s);
		q.setParameter("email",email);
		String idUtente = (String) q.getSingleResult();
		return idUtente;
	}
	
	
}
